
package toolbox

trait Monad[M[_]] { 
  def map[A,B](a2b: A=>B): M[A]=>M[B]
  def unit[A](a: A): M[A]
  def mult[A](mma: M[M[A]]): M[A]
  //
  def flatMap[A,B](ma: M[A], a2mb: A=>M[B]): M[B] = { 
    mult( map(a2mb)(ma) )
  }
}

object test_1 { 
  
}
